一道关于字符串数组的题目`麻烦帮忙讲解下!谢谢!

来源:百度知道 编辑:UC知道 时间:2024/05/10 06:08:27
#include <stdio.h>
#include <string.h>
void fun(char *w,int m)
{ char s,*p1,*p2;
p1=w;p2=w+m-1;
while(p1<p2)
{s=*p1++;*p1=*p2--;*p2=s;}
}
main()
{ char a[]="ABCDEFG";
fun(a,strlen(a));puts(a);
}

答案是 AGAAGAG
希望能有人帮我讲下详细的过程!感激不尽!

fun(a,strlen(a));
调用函数,
实参1 ="ABCDEFG“
实参2 字符串长度 7

p1=w;p2=w+m-1; p1 指向字符串第一个字符A
p2 指向字符串最后一个字符G

while(p1<p2) 循环条件
s=*p1++; 先做 s= *p1; (赋A), 再做++ (*p1,指针加了一位变B)
*p1=*p2--; 先做 *p1 = *p2 (赋G), 再做-- (*p2 指针减了一位变F)
*p2=s; *p2 变 A
第一次循环完毕字符串变 AGCDEAG
类似地 先做赋值,再做指针加减
第二次循环完毕字符串变 AGADGAG
类似地 先做赋值,再做指针加减
第三次循环完毕字符串变 AGAAGAG
}
p1== p2 退出
最终 AGAAGAG

#include <stdio.h>
#include <string.h>
void fun(char *w,int m)
{ char s,*p1,*p2;
p1=w;p2=w+m-1; //p1指向数组的首位,p2指向末位
while(p1<p2)
{s=*p1++;*p1=*p2--;*p2=s;} //这个过程有点繁,s=*p1;p1++;*p1=*p2;p2--;*p2=s;
} //这里每次循环,p1和p2所指的数值不变,然后p1移动到下一位,p2移动到上一位
main()
{ char a[]="ABCDEFG";
fun(a,strlen(a));puts(a);
}

分月列表导航
2006年 04月 03月 02月 01月
2005年 12月 11月 10月 09月 08月 07月 06月 05月 04月 03月 02月 01月 <